#ifndef VECTOR3D_H
#define VECTOR3D_H

#include <iostream>
#include <math.h>

class Vector3D
{
	public:
		//Default Constructor
		Vector3D(float x = 0.0f, float y = 0.0f, float z = 0.0f);

		//Copy Constructor
		Vector3D(const Vector3D &v);

		//Normalize the Vector
		Vector3D Normalize();

		//Magnitude of the Vector
		float Magnitude();

		//Inverse the sign of the Vector3D elements
		void Reverse();

		//Finds the distance between two vectors
		Vector3D Distance(const Vector3D &v);

		//Returns the x component
		float getX() { return x; }
		//Returns the y component
		float getY() { return y; }
		//Returns the z component
		float getZ() { return z; }

		//Sets the components
		void setX(float x) { this->x = x; }
		void setY(float y) { this->y = y; }
		void setZ(float z) { this->z = z; }

		//Overloading Operator
		Vector3D operator+(const Vector3D &v);
		Vector3D operator-(const Vector3D &v);
		Vector3D operator*(float a);
		Vector3D operator/(float s);
		
		Vector3D operator=(const Vector3D &v);
		
		//Compound Operators
		Vector3D operator+=(const Vector3D &v);
		Vector3D operator-=(const Vector3D &v);
		Vector3D operator*=(float s);
		Vector3D operator/=(float s);

		//Dot Product
		float DotProduct(const Vector3D &v);

		//Cross Product
		Vector3D CrossProduct(const Vector3D &v);

		//Zero Vector
		void ZeroVector();

	private:
		float x;
		float y;
		float z;
};

#endif